package IPrototipo.Funcionalidades.ABMCompetencia;

import IPrototipo.Entidades.Disponibilidad;
import IPrototipo.Entidades.LugarDeRealizacion;
import IPrototipo.Funcionalidades.Menues.MyTableModel;
import IPrototipo.Funcionalidades.Menues.FrameUsuarioAutenticado;
import IPrototipo.Funcionalidades.Menues.iDialogGeneral;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;

public class iBuscarLugares extends iDialogGeneral {

	private static final long serialVersionUID = 1L;
	private final JPanel contentPanel = new JPanel();
	
	private JButton okButton,cancelButton;
	private JTable tableDisponible;
	private JTable tableCompetencia;
	
	private Vector<LugarDeRealizacion> lugaresDisponibles;
	private Vector<Disponibilidad> lugaresElegidos;
	private Object[][] stringDisponibles;
	private Object[][] stringElegidos;
	private String[] columnNamesDisponibles={"Codigo","Nombre"};
	private String[] columnNamesElegidos={"Codigo","Nombre","Cantidad"};


	public iBuscarLugares(FrameUsuarioAutenticado perteneciente, boolean modal) {
		super(perteneciente,modal);
		Dimension tam= new Dimension(400, 500);
		setTamanio(tam);
		

		lugaresDisponibles= ((FrameUsuarioAutenticado) getParent()).getLugaresEnBD();
		lugaresElegidos=new Vector<Disponibilidad>();
		
		
	
		disponiblesToString();
		elegidosToString();
		
		getContentPane().setLayout(new BorderLayout());
		{
			JPanel panelTitulo = new JPanel();
			getContentPane().add(panelTitulo, BorderLayout.NORTH);
			{
				JLabel lblTitulo = new JLabel("Lugares de Realizaci\u00F3n");
				lblTitulo.setFont(new Font("Vani", Font.PLAIN, 20));
				panelTitulo.add(lblTitulo);
			}
		}
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));	
		{
			JScrollPane scpDisponibles = new JScrollPane();
			scpDisponibles.setBorder(new TitledBorder(null, "Disponibles", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			contentPanel.add(scpDisponibles);
			{
				tableDisponible = new JTable();
				tableDisponible.setRowSelectionAllowed(true);
				tableDisponible.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
				tableDisponible.setModel(new MyTableModel(columnNamesDisponibles, stringDisponibles));
				scpDisponibles.setViewportView(tableDisponible);
			}
		}
		{
			JPanel panel = new JPanel();
			contentPanel.add(panel);
			{
				JButton btnAgregar = new JButton("Agregar");
				panel.add(btnAgregar);
				btnAgregar.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {
					int linea=tableDisponible.getSelectedRow();
					if(linea>=0) deDisponibleaElegidos(lugaresDisponibles, lugaresElegidos, linea); }});
			}
			{
				JButton btnQuitar = new JButton("Quitar");
				panel.add(btnQuitar);
				btnQuitar.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
					int linea=tableCompetencia.getSelectedRow();
					if(linea>=0) deElegidosaDisponible(lugaresElegidos, lugaresDisponibles, linea); }});
			}
		}
		{
			JScrollPane scpCompetencia = new JScrollPane();
			scpCompetencia.setBorder(new TitledBorder(null, "Competencia", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			contentPanel.add(scpCompetencia);
			{
				tableCompetencia = new JTable();
				tableCompetencia.setModel(new MyTableModel(columnNamesElegidos, stringElegidos));
				scpCompetencia.setViewportView(tableCompetencia);
				tableCompetencia.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
				tableCompetencia.setRowSelectionAllowed(true);
			}
		}		
		{
			
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.CENTER));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			buttonPane.setMaximumSize(panel);
			{
				okButton = new JButton("Aceptar");
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				okButton.addActionListener(null);

			}
			{
				Component horizontalStrut = Box.createHorizontalStrut(20);
				buttonPane.add(horizontalStrut);
			}
			{
				cancelButton = new JButton("Cancelar");
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
				//cancelButton.addActionListener(this);
			}
		}
	
	}

	private void deDisponibleaElegidos(Vector<LugarDeRealizacion> origen, Vector<Disponibilidad> destino,int elemento){
		LugarDeRealizacion corrido=origen.remove(elemento);
		Disponibilidad nueva=new Disponibilidad();
		nueva.setLugar(corrido);
		destino.add(nueva);		
		disponiblesToString();
		elegidosToString();
		tableCompetencia.setModel(new MyTableModel(columnNamesElegidos, stringElegidos));
		tableDisponible.setModel(new MyTableModel(columnNamesDisponibles, stringDisponibles));
	}
	
	private void deElegidosaDisponible(Vector<Disponibilidad> origen,Vector<LugarDeRealizacion> destino, int elemento){
		Disponibilidad corrido=origen.remove(elemento);
		LugarDeRealizacion nueva=new LugarDeRealizacion();
		nueva.setCodigo(corrido.getLugar().getCodigo());
		nueva.setNombre(corrido.getLugar().getNombre());
		destino.add(nueva);		
		disponiblesToString();
		elegidosToString();
		tableCompetencia.setModel(new MyTableModel(columnNamesElegidos, stringElegidos));
		tableDisponible.setModel(new MyTableModel(columnNamesDisponibles, stringDisponibles));

	}
	
	private void disponiblesToString(){
		stringDisponibles=null;
		if(!lugaresDisponibles.isEmpty()){
			stringDisponibles=new String[lugaresDisponibles.size()][2];
			for(int i=0;i<lugaresDisponibles.size();i++){
				stringDisponibles[i][1]=lugaresDisponibles.get(i).getNombre();
				stringDisponibles[i][0]=lugaresDisponibles.get(i).getCodigo();
			}
		}
		
	}
	
	private void elegidosToString(){
		stringElegidos=null;
		if(!lugaresElegidos.isEmpty()){
			stringElegidos=new Object[lugaresElegidos.size()][3];
			for(int i=0;i<lugaresElegidos.size();i++){
				stringElegidos[i][1]=lugaresElegidos.get(i).getLugar().getNombre();
				stringElegidos[i][0]=lugaresElegidos.get(i).getLugar().getCodigo();
				stringElegidos[i][2]=1;
			}
		}
	}
	
	public Vector<Disponibilidad> getLugaresElegidos(){
		return lugaresElegidos;
	}
}